using System;
using System.Collections.Generic;

namespace LannyPractiseCode
{
    public class DoubleLinkedList
    {
        private HeroNode2 head=new HeroNode2(0,"","");
        

        public void Add(HeroNode2 heroNode)
        {
            //节点不能动，因此我们需要一个辅助的便利tempNode
            HeroNode2 temp=head;
            while(true)//遍历，找到最后
            {
                if(temp.NextNode==null)
                    break;
                //如果没有最后，temp后移
                temp=temp.NextNode;
            }
            //形成一个双向链表 !!!!!
            temp.NextNode=heroNode;
            heroNode.PreNode=temp;
        }

        public void DeleteNode(int Id)
        {
            if(head.NextNode==null)
            {
                System.Console.WriteLine("链表为空，无法删除。");
                return;
            }
            HeroNode2 temp=head.NextNode; //辅助变量
            bool flag=false;//标记是否找到待删除节点
            while(true)
            {
                if(temp.NextNode==null)
                {
                    break;//已经到最后
                }

                if(temp.Id==Id)
                {
                    flag=true;
                    break;
                }
                temp=temp.NextNode;
            }

            if(flag)
            {
                //temp.NextNode=temp.NextNode.NextNode;单向链表删除
                temp.PreNode.NextNode=temp.NextNode;
                if(temp.NextNode!=null)//删除最后一个节点有异常，所以需要这样判断。
                    temp.NextNode.PreNode=temp.PreNode;
            }
            else
            {
                System.Console.WriteLine("没有节点可删除！");
            }
        }

       //和单链表没区别  
        public void UpdateNode(HeroNode2 newNode)
        {
            if(head.NextNode==null)
            {
                System.Console.WriteLine("");
                return;
            }
            HeroNode2 temp=head;//辅助节点
            Boolean flag=false;//是否找到节点
            while(true)
            {
                if(temp.Id==newNode.Id)
                {
                    //找到节点
                    flag=true;
                    break;
                }
                temp=temp.NextNode;//没找到，继续下一个。
            }

            if(flag)
            {
                temp.Name=newNode.Name;
                temp.NickName=newNode.NickName;
            }
            else
                System.Console.WriteLine("没有需要修改的项...");
        }

        public HeroNode2 GetHead()
        {
            return head;
        }

        //遍历
        public void Display()
        {
            //节点不能动，因此我们需要一个辅助的便利tempNode
            HeroNode2 temp=head.NextNode;
            while(true)//遍历，找到最后
            {
                if(temp==null)
                    break;
                else
                {
                    Console.WriteLine(temp);
                    temp=temp.NextNode;
                }
                    
            }
        }
    }
}